package com.example.demo.common;

import jdk.internal.dynalink.linker.LinkerServices;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 扫描验证码是否过期
 */
@Component
public class TimerTools {
    //线程扫描验证码是否过期

    private Map<Integer, Long> codeTime = new ConcurrentHashMap<>();

    //接收code,并将其作为键与当前时间戳一起存储在codeTime中
    public void saveCode(Integer code){
        codeTime.put(code,System.currentTimeMillis());
    }


    //用于在指定的时间间隔内执行某个方法
    @Scheduled(fixedRate = 1000)
    public synchronized void chekCodeExpired(){
        long currentTime = System.currentTimeMillis();
        List<Integer> expiredCodes = new ArrayList<>();
        //遍历codeTime中的所有键值对，检查每个验证码的创建时间戳是否已经超过了3分钟
        for (Integer code : codeTime.keySet()){
            long createTimeMillis = codeTime.get(code);
            //如果是，则将该验证码的键添加到一个名为expiredCodes的列表中
            if (currentTime - createTimeMillis >3*60000){
                expiredCodes.add(code);
            }
        }
        //遍历expiredCodes列表，从codeTime中删除所有已过期的验证码
        for (Integer code :expiredCodes){
            codeTime.remove(code);
        }
    }

    //返回整个codeTime对象
    public Map<Integer,Long> getCodeTime(){
        return codeTime;
    }
}
